package com.itheima.d1_collection;

import java.util.ArrayList;
import java.util.function.Consumer;

//目标：掌握Lambda表达式的方式遍历集合
public class Demo06 {
    public static void main(String[] args) {
        ArrayList<String> list = new ArrayList<>();
        list.add("脉劫");
        list.add("康帅傅");
        list.add("粤利粤");

        //此时age是局部变量，局部变量的空间在栈内存！
        int age = 18;

        //需求：使用forEach方法，传递Lambda表达式遍历Collection集合中的每一个元素，并打印输出
        list.forEach(
                //这个匿名内部类是一个对象，在堆内存
                new Consumer<String>() {
                    @Override
                    public void accept(String s) {
                        //有可能当真的使用这个对象的时候，这个匿名内部类所在的方法已经弹栈
                        System.out.println(s);

                        //如果方法弹栈了，外面的那个age的变量空间也消失！
                        //消失后，此时才去使用对象的accept方法，才使用内部的这个age，就会导致这个变量找不到了！
                        //所以Java虚拟机会自动将age用final修饰，这样age就变成常量，它的内存空间就在常量池！就不会随着方法弹栈而消失
                        //age = 19;
                    }
                }
        );



        /*
        list.forEach(s -> System.out.println(s));
        */
    }
}
